<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>05计算属性和监视属性对比</title>
  <script src="../js/vue.js"></script>
</head>
<body>
  <div id="app">
    <h1>{{title}}</h1>
    姓：<input type="text" v-model="firstName">
    <br>
    名：<input type="text" v-model="lastName">
    <br>
    全名：<span>{{fullName}}</span>
  </div>
  <script>
    new Vue({
      el: '#app',
      data() {
        return {
          title: '计算属性和监视属性对比',
          firstName: 'zhang',
          lastName: 'san',
          fullName: 'zhang-san'
        }
      },
      /* 
        computed 和 watch 的区别
          1 computed能完成的功能，watch也可以
          2 watch可以完成的功能，computed不一定可以。例如：watch中可以进行异步操作，computed不行

        两个原则
          1 所有被Vue管理的函数，最好写成普通函数，这样this的指向就是vm或者组件实例化对象
          2 所有不被Vue管理的函数(定时器的回调，ajax的回调等等)，最好写成箭头函数，这样其中的this才是vm或者组件实例化对象
      */
      watch: {
        firstName(val) {
          this.fullName = val + '-' + this.lastName
        },
        lastName(val) {
          this.fullName = this.firstName + '-' + val
        }
      }
    })
  </script>
</body>
</html>